void somInitClass (in string className, in SOMClass parentClass, in long dataSize, in long maxStaticMethods, in long majorVersion, in long minorVersion)
somInitClass is obsolete, and should no longer be used. The SOM 2.0
kernel provides special handling for redispatch stubs in the case
of SOM 1.0 classes, and use of this method is what tells the kernel
that old-style redispatch stubs will be registered.
void somInitMIClass (in long inherit_vars, in string className, in SOMClassSequence parentClasses, in long dataSize, in long dataAlignment, in long maxStaticMethods, in long majorVersion, in long minorVersion)
somInitMIClass implements the second phase of dynamic class creation:
inheritance of interface and possibly implementation (instance
variables) by suitable initialization of <self> (a class object).
For somInitMIClass, the inherit_vars argument controls whether abstract
or implementation inheritance is used. Inherit_vars is a 32 bit
bit-vector. Implementation is inherited from parent i iff the bit
1<<i is on, or i>=32.
On a class-by-class basis, for each class ancestor, implementation
inheritance always takes precidence over abstract inheritance. This is
necessary to guarantee that procedures supporting parent method calls
(available on non-abstract parents) are always supported by parent
instance variables.
<className> is a string containing the class name. A copy is made, so
the string may be freed upon return to the caller if this is desired.
<parentClasses> is a SOMClassSequence containing pointers to the
parent classes. somInitMIClass makes a copy of this, so it may
be freed upon return to the caller if this is desired.
<dataSize> is the space needed for the instance variables
introduced by this class.
<dataAlignment> specifies the desired byte alignment for instance
data introduced by this class. A value of 0 selects a system-wide default;
any other argument is taken as the desired byte alignment multiple. Thus,
for example, even if a byte multiple of 8 is needed for double precision
values on a given system (so 8 is the default), a class whose instance data
doesn't require this can indicate otherwise. If A is the next memory
address available for holding instance data, the address that will be
used is A + (A mod byte-alignment).
<maxStaticMethods> is the maximum number of static methods that will be
added to the initialized class using addStaticMethod.
<majorVersion> indicates the major version number for this
implementation of the class definition, and <minorVersion>
somMToken somAddStaticMethod (in somId methodId, in somId methodDescriptor, in somMethodPtr method, in somMethodPtr redispatchStub, in somMethodPtr applyStub)
Adds the indicated method, creating and returning a new method token.
<methodDescriptor> is the somId for an identifier that can be used
to access signature information about the method from an interface
repository.
<method> is the actual method procedure for this method
<redispatchStub> is a procedure with the same calling sequence as
<method> that invokes somDispatch for the method.
<applyStub> is a procedure used to support somApply.